/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * EnfermedadYDiagnosticoPresentacion.java
 *
 * Created on 08/11/2010, 14:34:44
 */

package presentacion.evolucion;

import com.toedter.calendar.IDateEditor;
import hibernate.objeto.DiagnosticoYTriageInternacion;
import hibernate.objeto.EnfermedadYDiagnosticoAmbulatorio;
import hibernate.objeto.Interconsulta;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.RowFilter;
import javax.swing.SpinnerDateModel;
import javax.swing.table.TableRowSorter;
import logica.CapaLogica;
import logica.InterconsultaLogica;
import logica.validacion.CapaValidacion;
import presentacion.CapaPresentacion;
import presentacion.GestionPacientePresentacion;
import presentacion.MenuPrincipal;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.MensajePresentacion;
import presentacion.utilidad.Paginador;
import presentacion.utilidad.tabla.MiModeloTabla;

/**
 *
 * @author Gonzalo
 */
public class InterconsultaPresentacion extends javax.swing.JDialog {

    /** Creates new form InterconsultaPresentacion */
    public InterconsultaPresentacion(
            java.awt.Frame parent, boolean modal,
            EnfermedadYDiagnosticoAmbulatorio unEnfermedadYDiagnosticoAmbulatorio,
            DiagnosticoYTriageInternacion unDiagnosticoYTriageInternacion) {
        super(parent, modal);

        enfermedadYDiagnosticoAmbulatorio = unEnfermedadYDiagnosticoAmbulatorio;
        diagnosticoYTriageInternacion = unDiagnosticoYTriageInternacion;
        if (enfermedadYDiagnosticoAmbulatorio == null &&
                diagnosticoYTriageInternacion == null) {
            sePermiteCarga = false;
        } else {
            sePermiteCarga = true;
        }

        especialidadActivada = "";
        
        initComponents();

        personalizarGUI();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea datos de la ventana.
     *
     */
    private void personalizarGUI() {
        //Crea la barra de menu
        this.setJMenuBar(BarMenu.createMenuBarInterconsulta(this));
        
        //Setea a que enfermedad pertenece la interconsultaEnfermedad
        personalizarGUISegunTipoDePractica();
        
        iniciarPaginador();
        cargaTablaInterconsulta();

        /* Visualiza cuando es de historial, entidad finalizada, paciente 
           fallecido o acceso restringido */
        if (CapaPresentacion.modoCarga && sePermiteCarga) {
            modoCarga();
        } else if (!sePermiteCarga ||
                CapaPresentacion.modoVisualizacion) {
            modoVisualizacion();
        }
        
        botonCargarInterconsulta.setVisible(false);
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                setEnabled(false);
        //El ingreso manual de la especialidad comienza desactivado
        panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta.
                setVisible(false);
    }
    
    /**
     * Setea la ventana en modo carga.
     * 
     */
    private void modoCarga() {
        horaInterconsulta.getModel().setValue(new Date());
        fechaInterconsulta.setDate(new Date());
        textoApellidoNombreProfesional.setText("Evoluciona: " +
                MenuPrincipal.usuarioActivo.getPersona().getApellidoPersona() +
                ", " +
                MenuPrincipal.usuarioActivo.getPersona().getNombrePersona());
    }
    
    /**
     * Setea la ventana en modo visualización.
     *
     */
    private void modoVisualizacion() {
        textoDescriptivoCargaInterconsulta.setText("Seleccione una" + 
                " interconsulta para ver sus propiedades");
        
        setearEstadoCampos(false);
        botonCancelar.requestFocus();
        CapaPresentacion.personalizarBotonesEnVisualizacion(
                botonAceptar, botonCancelar);

        textoApellidoNombreProfesional.setText("");
    }
    
    /**
     * Setea la variable enfermedad o diagnostico y triage según corresponda,
     * si se lista por paciente o por enfermedad (o diagnostico y triege) y 
     * paciente.
     *
     */
    private void personalizarGUISegunTipoDePractica() {
        if (GestionPacientePresentacion.esAmbulatorio()) {
            //AMBULATORIO
            this.setTitle("Interconsulta - Ambulatorio");
            if (enfermedadYDiagnosticoAmbulatorio == null
                    && interconsultaSeleccionadaDeTabla != null) {
                this.enfermedadYDiagnosticoAmbulatorio =
                        interconsultaSeleccionadaDeTabla.getEnfermedadYDiagnosticoAmbulatorio();
            }
        } else {
            //INTERNACION
            this.setTitle("Interconsulta - Internación");
            if (diagnosticoYTriageInternacion == null
                    && interconsultaSeleccionadaDeTabla != null) {
                this.diagnosticoYTriageInternacion =
                        interconsultaSeleccionadaDeTabla.getDiagnosticoYTriageInternacion();
            }
        }
    }
    
    /**
     * Carga la talbla.
     * 
     */
    private void cargaTablaInterconsulta() {
        //Carga el vector de las interconsultas a mostrar
        cargarVectorInterconsultas();

        MiModeloTabla.cargarTablaInterconsulta(
             vectorInterconsultaAmbulatorio,
             tablaInterconsulta);
    }    
    
    /**
     * Carga el vector de interconsultas según las interconsultas que
     * se deseean listar. Si las enfermedades son nulas las interconsultas
     * se cargarán por paciente, de lo contrario se cargaran por paciente
     * y enfermedad.
     * 
     */
    private void cargarVectorInterconsultas() {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(0);
        if (GestionPacientePresentacion.esAmbulatorio()) {
            //AMBULATORIO
            if (enfermedadYDiagnosticoAmbulatorio != null) {
                //Interconsultas por enfermedad
                vectorInterconsultaAmbulatorio = InterconsultaLogica.
                        getVectorInterconsultaPorIdEnfermedadYDiagnosticoAmbulatorio(
                        enfermedadYDiagnosticoAmbulatorio.
                        getIdEnfermedadYDiagnosticoAmbulatorio());
            } else {
                //Interconsultas por paciente
                vectorInterconsultaAmbulatorio = InterconsultaLogica.
                        getVectorInterconsultaPorIdPaciente(
                        GestionPacientePresentacion.getPaciente().getIdPaciente());
            }
        } else {
            //INTERNACIÓN
            if (diagnosticoYTriageInternacion != null) {
                //Interconsultas por internación
                vectorInterconsultaAmbulatorio = InterconsultaLogica.
                        getVectorInterconsultaPorIdDiagnosticoYTriageInternacion(
                        diagnosticoYTriageInternacion.getIdDiagnosticoYTriageInternacion());
            } else {
                //Interconsultas por paciente
                vectorInterconsultaAmbulatorio = InterconsultaLogica.
                        getVectorInterconsultaPorIdPaciente(
                        GestionPacientePresentacion.getPaciente().getIdPaciente());
            }
        }        
    }
    
    /**
     * Exhibe los datos de la interconsultaEnfermedad seleccionada en pantalla.
     */
    private void exhibirDatosEnPantalla() {
        if (interconsultaSeleccionadaDeTabla != null) {
            String horaEnString =
                    interconsultaSeleccionadaDeTabla.getHoraInterconsulta();
            horaInterconsulta.getModel().setValue(new Date(0, 0, 0,
                    CapaLogica.separarHoras(horaEnString),
                    CapaLogica.separarMinutos(horaEnString),
                    CapaLogica.separarSegundos(horaEnString)));
            fechaInterconsulta.setDate(interconsultaSeleccionadaDeTabla.
                    getFechaInterconsulta());
            diagnosticoInterconsulta.setText(
                    interconsultaSeleccionadaDeTabla.
                    getInformacionComplementariaInterconsulta());
            diagnosticoInterconsulta.setCaretPosition(0);
            informacionComplementariaDiagnosticoInterconsulta.setText(
                    interconsultaSeleccionadaDeTabla.
                    getDiagnosticoInterconsulta());
            informacionComplementariaDiagnosticoInterconsulta.setCaretPosition(0);
            textoApellidoNombreProfesional.setText("Evolucionó: " +
                    interconsultaSeleccionadaDeTabla.
                    getApellidoProfesionalInterconsulta() + ", " +
                    interconsultaSeleccionadaDeTabla.
                    getNombreProfesionalInterconsulta());
            especialidadProfesionalIngresadaPorComboInterconsulta.
                    getModel().setSelectedItem(interconsultaSeleccionadaDeTabla.
                    getEspecialidadInterconsulta());
        }
    }
    
    /**
     * Limpia pantalla.
     */
    private void limpiaPantalla() {
        horaInterconsulta.getModel().setValue(new Date());
        fechaInterconsulta.setDate(new Date());
        diagnosticoInterconsulta.setText("");
        informacionComplementariaDiagnosticoInterconsulta.setText("");
        textoApellidoNombreProfesional.setText("");
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                setText("");
        especialidadProfesionalIngresadaPorComboInterconsulta.
                setModel(CapaPresentacion.
                getListaDeEspecialidadesDeUnProfesionalMedico());
        textoApellidoNombreProfesional.setText("");
    }

    /**
     * Habilita/deshabilita todos los campos de ingreso.
     *
     * @param estado El estado del campo
     */
    private void setearEstadoCampos(boolean estado) {
        textoHoraYFecha.setForeground(Fuente.COLOR_NORMAL);
        horaInterconsulta.setEnabled(estado);
        fechaInterconsulta.setEnabled(estado);
        textoDiagnostico.setForeground(Fuente.COLOR_NORMAL);
        diagnosticoInterconsulta.setEnabled(estado);
        informacionComplementariaDiagnosticoInterconsulta.
                setEnabled(estado);
        textoEspecialidadProfesional.setForeground(Fuente.COLOR_NORMAL);
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                setEnabled(estado);
        especialidadProfesionalIngresadaPorComboInterconsulta.
                setEnabled(estado);
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelCargaInterconsulta = new javax.swing.JPanel();
        textoHoraYFecha = new javax.swing.JLabel();
        SpinnerDateModel spinerModel = new SpinnerDateModel(new Date(0, 0, 0, Calendar.HOUR_OF_DAY, 0, 0), null, null, Calendar.HOUR_OF_DAY);
        horaInterconsulta = new javax.swing.JSpinner(spinerModel);
        fechaInterconsulta = new com.toedter.calendar.JDateChooser();
        textoEspecialidadProfesional = new javax.swing.JLabel();
        especialidadProfesionalIngresadaPorComboInterconsulta = new javax.swing.JComboBox();
        panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta = new javax.swing.JPanel();
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio = new javax.swing.JTextField();
        textoDiagnostico = new javax.swing.JLabel();
        textoInformacionComplementariaDiagnostico = new javax.swing.JLabel();
        diagnosticoScrollPane = new javax.swing.JScrollPane();
        diagnosticoInterconsulta = new javax.swing.JTextArea();
        informacionComplementariaPersonalScrollPane = new javax.swing.JScrollPane();
        informacionComplementariaDiagnosticoInterconsulta = new javax.swing.JTextArea();
        textoApellidoNombreProfesional = new javax.swing.JLabel();
        botonCancelar = new javax.swing.JButton();
        botonAceptar = new javax.swing.JButton();
        panelVisualizacionInterconsulta = new javax.swing.JPanel();
        textoDescriptivoVisualizacionExamenComplementario = new javax.swing.JLabel();
        textoFiltrar = new javax.swing.JLabel();
        filtrar = new javax.swing.JTextField();
        tablaInterconsultaScrollPane = new javax.swing.JScrollPane();
        tablaInterconsulta = new javax.swing.JTable(new MiModeloTabla());
        paginadorUno = new javax.swing.JPanel();
        botonAnteriorPaginadorUno = new javax.swing.JButton();
        botonSiguientePaginadorUno = new javax.swing.JButton();
        textoDescriptivoCargaInterconsulta = new javax.swing.JLabel();
        botonCargarInterconsulta = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Interconsulta");
        setResizable(false);

        panelCargaInterconsulta.setMinimumSize(new java.awt.Dimension(0, 0));
        panelCargaInterconsulta.setPreferredSize(new java.awt.Dimension(1004, 463));

        textoHoraYFecha.setFont(Fuente.FUENTE_LABEL);
        textoHoraYFecha.setForeground(Fuente.COLOR_NORMAL);
        textoHoraYFecha.setText("Hora y fecha");
        textoHoraYFecha.setPreferredSize(new java.awt.Dimension(95, 20));

        JSpinner.DateEditor horaDeMuerte = new JSpinner.DateEditor(horaInterconsulta, "HH:mm:ss");
        horaInterconsulta.setEditor(horaDeMuerte);
        horaInterconsulta.setFont(Fuente.FUENTE_TEXTFIELD);
        horaInterconsulta.setMinimumSize(new java.awt.Dimension(137, 20));
        horaInterconsulta.setPreferredSize(new java.awt.Dimension(128, 20));

        fechaInterconsulta.setToolTipText("");
        fechaInterconsulta.setDate(new Date());
        fechaInterconsulta.setMaxSelectableDate(new Date());
        fechaInterconsulta.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaInterconsulta.setMinimumSize(new java.awt.Dimension(105, 20));
        fechaInterconsulta.setPreferredSize(new java.awt.Dimension(144, 20));

        textoEspecialidadProfesional.setFont(Fuente.FUENTE_LABEL);
        textoEspecialidadProfesional.setForeground(Fuente.COLOR_NORMAL);
        textoEspecialidadProfesional.setText("Especialidad");
        textoEspecialidadProfesional.setPreferredSize(new java.awt.Dimension(95, 20));

        especialidadProfesionalIngresadaPorComboInterconsulta.setFont(Fuente.FUENTE_COMBOBOX);
        especialidadProfesionalIngresadaPorComboInterconsulta.setForeground(Fuente.COLOR_NORMAL);
        especialidadProfesionalIngresadaPorComboInterconsulta.setModel(CapaPresentacion.getListaDeEspecialidadesDeUnProfesionalMedico());
        especialidadProfesionalIngresadaPorComboInterconsulta.setMinimumSize(new java.awt.Dimension(0, 0));
        especialidadProfesionalIngresadaPorComboInterconsulta.setPreferredSize(new java.awt.Dimension(278, 20));
        especialidadProfesionalIngresadaPorComboInterconsulta.setVerifyInputWhenFocusTarget(false);
        especialidadProfesionalIngresadaPorComboInterconsulta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                especialidadProfesionalIngresadaPorComboInterconsultaActionPerformed(evt);
            }
        });

        panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta.setPreferredSize(new java.awt.Dimension(278, 20));

        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.setFont(Fuente.FUENTE_TEXTFIELD);
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.setForeground(Fuente.COLOR_NORMAL);
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.setToolTipText("Ingrese aquí una especialidad que no se encuentra en la lista");
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.setMinimumSize(new java.awt.Dimension(0, 0));
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.setPreferredSize(new java.awt.Dimension(278, 20));

        javax.swing.GroupLayout panelEspecialidadProfesionalIngresadaPorUsuarioInterconsultaLayout = new javax.swing.GroupLayout(panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta);
        panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta.setLayout(panelEspecialidadProfesionalIngresadaPorUsuarioInterconsultaLayout);
        panelEspecialidadProfesionalIngresadaPorUsuarioInterconsultaLayout.setHorizontalGroup(
            panelEspecialidadProfesionalIngresadaPorUsuarioInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        panelEspecialidadProfesionalIngresadaPorUsuarioInterconsultaLayout.setVerticalGroup(
            panelEspecialidadProfesionalIngresadaPorUsuarioInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        textoDiagnostico.setFont(Fuente.FUENTE_LABEL);
        textoDiagnostico.setForeground(Fuente.COLOR_NORMAL);
        textoDiagnostico.setText("Diagnóstico");
        textoDiagnostico.setPreferredSize(new java.awt.Dimension(95, 20));

        textoInformacionComplementariaDiagnostico.setFont(Fuente.FUENTE_LABEL);
        textoInformacionComplementariaDiagnostico.setForeground(Fuente.COLOR_NORMAL);
        textoInformacionComplementariaDiagnostico.setText("Información complementaria");
        textoInformacionComplementariaDiagnostico.setPreferredSize(new java.awt.Dimension(220, 20));

        diagnosticoScrollPane.setMinimumSize(new java.awt.Dimension(0, 0));
        diagnosticoScrollPane.setPreferredSize(new java.awt.Dimension(487, 354));

        diagnosticoInterconsulta.setColumns(20);
        diagnosticoInterconsulta.setFont(Fuente.FUENTE_TEXTFIELD);
        diagnosticoInterconsulta.setForeground(Fuente.COLOR_NORMAL);
        diagnosticoInterconsulta.setLineWrap(true);
        diagnosticoInterconsulta.setRows(2);
        diagnosticoInterconsulta.setWrapStyleWord(true);
        diagnosticoInterconsulta.setMinimumSize(new java.awt.Dimension(0, 0));
        diagnosticoScrollPane.setViewportView(diagnosticoInterconsulta);

        informacionComplementariaPersonalScrollPane.setMinimumSize(new java.awt.Dimension(0, 0));
        informacionComplementariaPersonalScrollPane.setPreferredSize(new java.awt.Dimension(487, 354));

        informacionComplementariaDiagnosticoInterconsulta.setColumns(20);
        informacionComplementariaDiagnosticoInterconsulta.setFont(Fuente.FUENTE_TEXTFIELD);
        informacionComplementariaDiagnosticoInterconsulta.setForeground(Fuente.COLOR_NORMAL);
        informacionComplementariaDiagnosticoInterconsulta.setLineWrap(true);
        informacionComplementariaDiagnosticoInterconsulta.setRows(3);
        informacionComplementariaDiagnosticoInterconsulta.setWrapStyleWord(true);
        informacionComplementariaDiagnosticoInterconsulta.setMinimumSize(new java.awt.Dimension(278, 27));
        informacionComplementariaDiagnosticoInterconsulta.setPreferredSize(new java.awt.Dimension(278, 27));
        informacionComplementariaPersonalScrollPane.setViewportView(informacionComplementariaDiagnosticoInterconsulta);

        textoApellidoNombreProfesional.setFont(Fuente.FUENTE_LABEL);
        textoApellidoNombreProfesional.setForeground(Fuente.COLOR_NORMAL);
        textoApellidoNombreProfesional.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        textoApellidoNombreProfesional.setText("<Profesional que evoluciona>");
        textoApellidoNombreProfesional.setPreferredSize(new java.awt.Dimension(487, 20));

        javax.swing.GroupLayout panelCargaInterconsultaLayout = new javax.swing.GroupLayout(panelCargaInterconsulta);
        panelCargaInterconsulta.setLayout(panelCargaInterconsultaLayout);
        panelCargaInterconsultaLayout.setHorizontalGroup(
            panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelCargaInterconsultaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelCargaInterconsultaLayout.createSequentialGroup()
                        .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(diagnosticoScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(textoDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(informacionComplementariaPersonalScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 507, Short.MAX_VALUE)
                            .addComponent(textoInformacionComplementariaDiagnostico, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoApellidoNombreProfesional, javax.swing.GroupLayout.DEFAULT_SIZE, 507, Short.MAX_VALUE)))
                    .addGroup(panelCargaInterconsultaLayout.createSequentialGroup()
                        .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelCargaInterconsultaLayout.createSequentialGroup()
                                .addComponent(textoEspecialidadProfesional, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(especialidadProfesionalIngresadaPorComboInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelCargaInterconsultaLayout.createSequentialGroup()
                                .addComponent(textoHoraYFecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(horaInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(fechaInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        panelCargaInterconsultaLayout.setVerticalGroup(
            panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelCargaInterconsultaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(textoHoraYFecha, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(horaInterconsulta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(textoApellidoNombreProfesional, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(fechaInterconsulta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(especialidadProfesionalIngresadaPorComboInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(textoEspecialidadProfesional, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoInformacionComplementariaDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelCargaInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(diagnosticoScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE)
                    .addComponent(informacionComplementariaPersonalScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE))
                .addContainerGap())
        );

        botonCancelar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonCancelar.setForeground(Fuente.COLOR_NORMAL);
        botonCancelar.setIcon(Icono.ICONO_16_CANCELAR);
        botonCancelar.setText("Cancelar");
        botonCancelar.setToolTipText("Cancela la operación");
        botonCancelar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        botonAceptar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonAceptar.setForeground(Fuente.COLOR_NORMAL);
        botonAceptar.setIcon(Icono.ICONO_16_ACEPTAR);
        botonAceptar.setText("Aceptar");
        botonAceptar.setToolTipText("Agrega el examen complementario");
        botonAceptar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        panelVisualizacionInterconsulta.setMinimumSize(new java.awt.Dimension(1004, 156));
        panelVisualizacionInterconsulta.setPreferredSize(new java.awt.Dimension(1004, 156));

        textoDescriptivoVisualizacionExamenComplementario.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVisualizacionExamenComplementario.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVisualizacionExamenComplementario.setText("Lista de interconsultas que posee el paciente");
        textoDescriptivoVisualizacionExamenComplementario.setPreferredSize(new java.awt.Dimension(500, 20));

        textoFiltrar.setFont(Fuente.FUENTE_LABEL);
        textoFiltrar.setText("Filtrar");
        textoFiltrar.setPreferredSize(new java.awt.Dimension(28, 20));

        filtrar.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrar.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarKeyReleased(evt);
            }
        });

        tablaInterconsultaScrollPane.setPreferredSize(new java.awt.Dimension(984, 90));

        tablaInterconsulta.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaInterconsultaMouseClicked(evt);
            }
        });
        tablaInterconsulta.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaInterconsultaKeyReleased(evt);
            }
        });
        tablaInterconsultaScrollPane.setViewportView(tablaInterconsulta);

        paginadorUno.setMaximumSize(new java.awt.Dimension(700, 14));

        botonAnteriorPaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonAnteriorPaginadorUno.setIcon(Icono.ICONO_16_ANTERIOR);
        botonAnteriorPaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonAnteriorPaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAnteriorPaginadorUnoActionPerformed(evt);
            }
        });

        botonSiguientePaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonSiguientePaginadorUno.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonSiguientePaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonSiguientePaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiguientePaginadorUnoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout paginadorUnoLayout = new javax.swing.GroupLayout(paginadorUno);
        paginadorUno.setLayout(paginadorUnoLayout);
        paginadorUnoLayout.setHorizontalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createSequentialGroup()
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        paginadorUnoLayout.setVerticalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        javax.swing.GroupLayout panelVisualizacionInterconsultaLayout = new javax.swing.GroupLayout(panelVisualizacionInterconsulta);
        panelVisualizacionInterconsulta.setLayout(panelVisualizacionInterconsultaLayout);
        panelVisualizacionInterconsultaLayout.setHorizontalGroup(
            panelVisualizacionInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelVisualizacionInterconsultaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelVisualizacionInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tablaInterconsultaScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 1000, Short.MAX_VALUE)
                    .addGroup(panelVisualizacionInterconsultaLayout.createSequentialGroup()
                        .addComponent(textoDescriptivoVisualizacionExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 268, Short.MAX_VALUE)
                        .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelVisualizacionInterconsultaLayout.setVerticalGroup(
            panelVisualizacionInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelVisualizacionInterconsultaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelVisualizacionInterconsultaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoDescriptivoVisualizacionExamenComplementario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tablaInterconsultaScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        MiModeloTabla.inicializarTabla(tablaInterconsulta);

        textoDescriptivoCargaInterconsulta.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoCargaInterconsulta.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoCargaInterconsulta.setText("Ingrese los datos de la interconsulta");
        textoDescriptivoCargaInterconsulta.setPreferredSize(new java.awt.Dimension(500, 23));

        botonCargarInterconsulta.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonCargarInterconsulta.setForeground(Fuente.COLOR_NORMAL);
        botonCargarInterconsulta.setIcon(Icono.ICONO_16_AGREGAR);
        botonCargarInterconsulta.setText("Agregar interconsulta");
        botonCargarInterconsulta.setToolTipText("Agrega los datos para cargar una interconsulta");
        botonCargarInterconsulta.setPreferredSize(new java.awt.Dimension(175, 20));
        botonCargarInterconsulta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCargarInterconsultaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(panelCargaInterconsulta, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 1020, Short.MAX_VALUE)
                    .addComponent(panelVisualizacionInterconsulta, javax.swing.GroupLayout.DEFAULT_SIZE, 1020, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(textoDescriptivoCargaInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 345, Short.MAX_VALUE)
                        .addComponent(botonCargarInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelVisualizacionInterconsulta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoDescriptivoCargaInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonCargarInterconsulta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelCargaInterconsulta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents
//GEN-FIRST:event_botonEnfermedadPersonalActionPerformed
//GEN-LAST:event_botonEnfermedadPersonalActionPerformed

    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
}//GEN-LAST:event_botonCancelarActionPerformed

    private void especialidadProfesionalIngresadaPorComboInterconsultaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_especialidadProfesionalIngresadaPorComboInterconsultaActionPerformed
        interconsultaSeleccionadaDeTabla = (Interconsulta)
                MiModeloTabla.recuperarObjetoDeTabla(
                Interconsulta.class.getName(),
                tablaInterconsulta);

        if (especialidadProfesionalIngresadaPorComboInterconsulta.
                getSelectedItem().toString().equalsIgnoreCase(
                "Ingrese una especialidad...") && interconsultaSeleccionadaDeTabla == null) {
            especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                    setEnabled(true);
            panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta.
                setVisible(true);
            especialidadProfesionalIngresadaPorComboInterconsulta.
                    transferFocus();
        } else {
            especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                    setEnabled(false);
            panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta.
                setVisible(false);
        }
    }//GEN-LAST:event_especialidadProfesionalIngresadaPorComboInterconsultaActionPerformed

    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        agregarInterconsulta();
}//GEN-LAST:event_botonAceptarActionPerformed

//GEN-FIRST:event_tablaExamenComplementarioMouseClicked

//GEN-LAST:event_tablaExamenComplementarioMouseClicked

//GEN-FIRST:event_tablaExamenComplementarioKeyReleased

//GEN-LAST:event_tablaExamenComplementarioKeyReleased

    private void botonCargarInterconsultaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCargarInterconsultaActionPerformed
        habilitarCarga();
}//GEN-LAST:event_botonCargarInterconsultaActionPerformed

    private void filtrarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaInterconsulta.getModel());

        tablaInterconsulta.setRowSorter(sorter);
        String texto = filtrar.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
    }//GEN-LAST:event_filtrarKeyReleased

    private void tablaInterconsultaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaInterconsultaKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_UP ||
                evt.getKeyCode() == KeyEvent.VK_DOWN) {
            cargarOVerPropiedadesInterconsulta();
        }
    }//GEN-LAST:event_tablaInterconsultaKeyReleased

    private void tablaInterconsultaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaInterconsultaMouseClicked
        cargarOVerPropiedadesInterconsulta();
    }//GEN-LAST:event_tablaInterconsultaMouseClicked

    private void botonAnteriorPaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAnteriorPaginadorUnoActionPerformed
        paginarAtrasTablaInterconsulta();
    }//GEN-LAST:event_botonAnteriorPaginadorUnoActionPerformed

    private void botonSiguientePaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiguientePaginadorUnoActionPerformed
        paginarAdelanteTablaInterconsulta();
    }//GEN-LAST:event_botonSiguientePaginadorUnoActionPerformed

    /**
     * Al seleccionar una objeto InterconsultaPresentacion de la tabla deben
     * inhabilitarse los campos de carga. Si el objeto es nulo se permite el
     * ingresos de los datos
     */
    private void cargarOVerPropiedadesInterconsulta() {
        interconsultaSeleccionadaDeTabla = (Interconsulta) MiModeloTabla.
                recuperarObjetoDeTabla(Interconsulta.
                class.getName(), tablaInterconsulta);
        
        if (interconsultaSeleccionadaDeTabla == null && sePermiteCarga) {
            habilitarCarga();
        } else if (interconsultaSeleccionadaDeTabla == null &&
                (!sePermiteCarga ||
                CapaPresentacion.modoVisualizacion)) {
            limpiaPantalla();
            textoDescriptivoCargaInterconsulta.setText("Seleccione una"
                    + " interconsulta para ver sus propiedades");
        } else if (interconsultaSeleccionadaDeTabla != null && sePermiteCarga &&
                CapaPresentacion.modoCarga) {
            habilitarPropiedades();
            botonCargarInterconsulta.setVisible(true);
        } else if (interconsultaSeleccionadaDeTabla != null && sePermiteCarga &&
                CapaPresentacion.modoVisualizacion) {
            habilitarPropiedades();
        } else if (interconsultaSeleccionadaDeTabla != null && !sePermiteCarga) {
            habilitarPropiedades();
            botonCargarInterconsulta.setVisible(false);
        }
    }

    /**
     * Habilita los campos necesarios para visualizar propiedades de la
     * interconsultaEnfermedad
     */
    private void habilitarPropiedades() {
        setearEstadoCampos(false);
        exhibirDatosEnPantalla();
        String textoConcatenar = "";
        if (interconsultaSeleccionadaDeTabla.getEnfermedadYDiagnosticoAmbulatorio() != null) {
            textoConcatenar =
                    "Enfermedad: ";
            textoDescriptivoCargaInterconsulta.setText(textoConcatenar +
                interconsultaSeleccionadaDeTabla.getEnfermedadYDiagnosticoAmbulatorio().
                getCie9mc().getDetalleCie9mc());
            textoDescriptivoCargaInterconsulta.setToolTipText(textoConcatenar +
                interconsultaSeleccionadaDeTabla.getEnfermedadYDiagnosticoAmbulatorio().
                getCie9mc().getDetalleCie9mc());
        } else {
            textoConcatenar =
                    "Diagnóstico y triage: ";
            textoDescriptivoCargaInterconsulta.setText(textoConcatenar +
                interconsultaSeleccionadaDeTabla.getDiagnosticoYTriageInternacion().
                getDiagnosticoDiagnosticoYTriageInternacion());
            textoDescriptivoCargaInterconsulta.setToolTipText(textoConcatenar +
                interconsultaSeleccionadaDeTabla.getDiagnosticoYTriageInternacion().
                getDiagnosticoDiagnosticoYTriageInternacion());
        }
        CapaPresentacion.personalizarBotonesEnVisualizacion(
                botonAceptar, botonCancelar);
    }

    /**
     * Al presionarlo, permite que se cargen interconsultas y se oculta
     * automáticamente.
     */
    public void habilitarCarga() {
        if (CapaPresentacion.modoCarga || CapaPresentacion.modoModificacion) {
        setearEstadoCampos(true);
        limpiaPantalla();
        //Deselecciona lo seleccionado en la tabla
        tablaInterconsulta.clearSelection();
        botonCargarInterconsulta.setVisible(false);
        textoDescriptivoCargaInterconsulta.setText(
                "Ingrese los datos de la interconsulta");
        CapaPresentacion.personalizarBotonesEnCargaDeDatos(
                    botonAceptar, botonCancelar);
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                setEnabled(false);
        textoApellidoNombreProfesional.setText("Evoluciona: " +
            MenuPrincipal.usuarioActivo.getPersona().getApellidoPersona() +
            ", " +
            MenuPrincipal.usuarioActivo.getPersona().getNombrePersona());
        }
    }
    
    /**
     * Al agregarse una nueva interconsultaEnfermedad se actualiza la tabla y se
     * selecciona por defecto la interconsultaEnfermedad agregada para
     * mostrandose las propiedades de la misma.
     */
    private void actualizarInterconsultaAmbulatorioCargada() {
        //Carga el vector de las interconsultas a mostrar
        cargarVectorInterconsultas();
        MiModeloTabla.cargarTablaInterconsulta(
             vectorInterconsultaAmbulatorio,
             tablaInterconsulta);

        while(!MiModeloTabla.seleccionarFilaDeTabla(String.valueOf(
                interconsultaACargar.getIdInterconsulta()),
                tablaInterconsulta, tablaInterconsultaScrollPane)) {
            paginarAdelanteTablaInterconsulta();
        }

        cargarOVerPropiedadesInterconsulta();
    }
    
    /**
     * Agrega/modifica la interconsultaEnfermedad de una enfermedad del paciente
     * 
     */
    private void agregarInterconsulta() {
        setearEspecialidad();
        //Valida todos los datos ingresados
        if (validarCampos()) {
            //Carga toda la información de la pantalla
            recopilarInformacion();
            int[] idInterconsultaAmbulatorio = new int[1];
            if (InterconsultaLogica.agregarInterconsulta(
                    datosInterconsulta,
                    enfermedadYDiagnosticoAmbulatorio,
                    diagnosticoYTriageInternacion,
                    idInterconsultaAmbulatorio)) {
                interconsultaACargar = InterconsultaLogica.
                        getInterconsultaPorId(
                        idInterconsultaAmbulatorio[0]);
                        actualizarInterconsultaAmbulatorioCargada();
            } 

        } else {
            MensajePresentacion.errorDatosInvalidos();
        }
    }
    
    /**
     * Setea la especialidad según corresponda, ya sea del combobox o del
     * textfield.
     *
     */
    private void setearEspecialidad() {
        if (especialidadProfesionalIngresadaPorComboInterconsulta.getSelectedItem().
                toString().equalsIgnoreCase("Ingrese una especialidad...")) {
            especialidadActivada = especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                    getText();
        } else {
            especialidadActivada =
                    especialidadProfesionalIngresadaPorComboInterconsulta.
                    getSelectedItem().toString();
        }
    }

    /**
     * Valida en conjunto todos los campos. Aquellos que son obligatorios y los
     * que no.
     *
     * @return true si el objeto está listo para cargarse, false en caso
     * contrario
     */
    private boolean validarCampos() {
        boolean horaYFecha = validarHoraYFecha();
        boolean especialidadProfesional = validarEspecialidadProfesional();
        boolean diagnostico = validarDiagnostico();

        return (horaYFecha &&
                diagnostico && especialidadProfesional);
    }

    /**
     * Valida los campos correspondiente a la fecha y hora.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarHoraYFecha() {
        //Manejo de la validación de fecha
        if (!CapaValidacion.validarFecha(
                fechaInterconsulta.getDate(), null, true)) {
            textoHoraYFecha.setForeground(
                    Fuente.COLOR_ERROR);
            textoHoraYFecha.setToolTipText(InformeError.INFORME_ERROR_USO_COMUN_HORA_Y_FECHA);
            return false;
        } else {
            textoHoraYFecha.setForeground(
                    Fuente.COLOR_NORMAL);
            textoHoraYFecha.setToolTipText(null);
            return true;
        }
    }

    /**
     * Valida los campos correspondiente a la especialidad.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarEspecialidadProfesional() {
        //Manejo de la validación del apellido del profesional
        if (!CapaValidacion.validarCampoObligatorio(
                especialidadActivada)) {
            textoEspecialidadProfesional.setForeground(
                    Fuente.COLOR_ERROR);
            textoEspecialidadProfesional.setToolTipText(InformeError.
                    INFORME_ERROR_INTERCONSULTA_AMBULATORIO_ESPECIALIDAD);
            return false;
        } else {
            textoEspecialidadProfesional.setForeground(
                    Fuente.COLOR_NORMAL);
            textoEspecialidadProfesional.setToolTipText(null);
            return true;
        }
    }

    /**
     * Valida los campos correspondiente al diagnóstico.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarDiagnostico() {
        //Manejo de la validación del diagnóstico
        if (!CapaValidacion.validarCampoObligatorio(
                diagnosticoInterconsulta.getText())) {
            textoDiagnostico.setForeground(
                    Fuente.COLOR_ERROR);
            return false;
        } else {
            textoDiagnostico.setForeground(
                    Fuente.COLOR_NORMAL);
            return true;
        }
    }

    /**
     * Carga todos los datos ingresados en pantalla.
     *
     */
    private void recopilarInformacion() {
        datosInterconsulta = new Object[7];

        datosInterconsulta[
                CapaLogica.INTERCONSULTA_HORA] =
                CapaLogica.separarTiempo(horaInterconsulta.
                getValue().toString());

        datosInterconsulta[
                CapaLogica.INTERCONSULTA_FECHA] =
                fechaInterconsulta.getDate();

        datosInterconsulta[CapaLogica.
                INTERCONSULTA_DIAGNOSTICO] =
                informacionComplementariaDiagnosticoInterconsulta.getText();

        datosInterconsulta[CapaLogica.
                INTERCONSULTA_INFORMACION_COMPLEMENTARIA_DIAGNOSTICO] =
                diagnosticoInterconsulta.getText();

        datosInterconsulta[
                CapaLogica.INTERCONSULTA_NOMBRE_PROFESIONAL] =
                MenuPrincipal.usuarioActivo.getPersona().getNombrePersona();

        datosInterconsulta[
                CapaLogica.INTERCONSULTA_APELLIDO_PROFESIONAL] =
                MenuPrincipal.usuarioActivo.getPersona().getApellidoPersona();

        datosInterconsulta[
                CapaLogica.INTERCONSULTA_ESPECIALIDAD_PROFESIONAL] =
                especialidadActivada;
    }    
   
    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEnter = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    agregarInterconsulta();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    dispose();
                }
            }
        };
        //Setear eventos
        ((DefaultEditor) horaInterconsulta.getEditor()).
                getTextField().addKeyListener(keyListenerEnter);
        ((DefaultEditor) horaInterconsulta.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);

        ((IDateEditor) fechaInterconsulta.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEnter);
        ((IDateEditor) fechaInterconsulta.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);
        
        especialidadProfesionalIngresadaPorComboInterconsulta.
                addKeyListener(keyListenerEnter);
        especialidadProfesionalIngresadaPorComboInterconsulta.
                addKeyListener(keyListenerEscape);

        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                addKeyListener(keyListenerEnter);
        especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio.
                addKeyListener(keyListenerEscape);

        tablaInterconsulta.addKeyListener(keyListenerEscape);
        botonAnteriorPaginadorUno.addKeyListener(keyListenerEscape);
        botonSiguientePaginadorUno.addKeyListener(keyListenerEscape);

        filtrar.addKeyListener(keyListenerEscape);

        botonAceptar.addKeyListener(keyListenerEscape);
        botonCancelar.addKeyListener(keyListenerEscape);
        botonCargarInterconsulta.addKeyListener(keyListenerEscape);

    }

    /**
     * Inicia el/los paginadores activos en esta ventana
     */
    private void iniciarPaginador() {
        //Rango de filas para cada paginador
        int rangoFilas[] = new int[CapaLogica.PAGINADOR_PAGINADORES_SIMULTANEOS];

        //Rango de filas para el paginador 1
        rangoFilas[0] = 5;
        //Rango de filas para el paginador 2
        rangoFilas[1] = 10;
        //Rango de filas para el paginador 3
        rangoFilas[2] = 0;

        Paginador.inicializarPaginador(rangoFilas);
    }

    /**
     * Realiza la paginación hacia atrás.
     */
    private void paginarAtrasTablaInterconsulta() {
        //Retrocede el los índices
        Paginador.atrasPaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaInterconsulta.getModel().getColumnCount() > 0) {
            cargaTablaInterconsulta();
        }
    }

    /**
     * Realiza la paginación hacia adelante, teniendo en cuenta que existan elementos,
     * de lo contrario no procede a listarlos.
     */
    private void paginarAdelanteTablaInterconsulta() {
        //Adelanta los índices
        Paginador.adelantePaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaInterconsulta.getModel().getColumnCount() > 0) {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                cargarVectorInterconsultas();
                if (vectorInterconsultaAmbulatorio == null) {
                    Paginador.atrasPaginador(0);
                }

                cargaTablaInterconsulta();
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonAnteriorPaginadorUno;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JButton botonCargarInterconsulta;
    private javax.swing.JButton botonSiguientePaginadorUno;
    private javax.swing.JTextArea diagnosticoInterconsulta;
    private javax.swing.JScrollPane diagnosticoScrollPane;
    private javax.swing.JComboBox especialidadProfesionalIngresadaPorComboInterconsulta;
    private javax.swing.JTextField especialidadProfesionalIngresadaPorUsuarioInterconsultaAmbulatorio;
    private com.toedter.calendar.JDateChooser fechaInterconsulta;
    private javax.swing.JTextField filtrar;
    private javax.swing.JSpinner horaInterconsulta;
    private javax.swing.JTextArea informacionComplementariaDiagnosticoInterconsulta;
    private javax.swing.JScrollPane informacionComplementariaPersonalScrollPane;
    private javax.swing.JPanel paginadorUno;
    private javax.swing.JPanel panelCargaInterconsulta;
    private javax.swing.JPanel panelEspecialidadProfesionalIngresadaPorUsuarioInterconsulta;
    private javax.swing.JPanel panelVisualizacionInterconsulta;
    private javax.swing.JTable tablaInterconsulta;
    private javax.swing.JScrollPane tablaInterconsultaScrollPane;
    private javax.swing.JLabel textoApellidoNombreProfesional;
    private javax.swing.JLabel textoDescriptivoCargaInterconsulta;
    private javax.swing.JLabel textoDescriptivoVisualizacionExamenComplementario;
    private javax.swing.JLabel textoDiagnostico;
    private javax.swing.JLabel textoEspecialidadProfesional;
    private javax.swing.JLabel textoFiltrar;
    private javax.swing.JLabel textoHoraYFecha;
    private javax.swing.JLabel textoInformacionComplementariaDiagnostico;
    // End of variables declaration//GEN-END:variables
    private EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio;
    private DiagnosticoYTriageInternacion diagnosticoYTriageInternacion;
    private Vector<Interconsulta> vectorInterconsultaAmbulatorio;
    private Object[] datosInterconsulta ;
    private Interconsulta interconsultaSeleccionadaDeTabla;
    private Interconsulta interconsultaACargar;
    private String especialidadActivada;
    static public boolean sePermiteCarga;
}
